The op_code has to be optional, as new op codes may be added in the future. They would fail to be decoded in earlier versions, causing am error. With the optional modifier, they will be decoded as null.